python 反反爬虫策略之js动态加密url破解 您所在的位置:网站首页 爬虫 加密 python 反反爬虫策略之js动态加密url破解

python 反反爬虫策略之js动态加密url破解

2023-07-26 20:41| 来源: 网络整理| 查看: 265

这次这个爬虫废了我好几天时间,第一次遇到js反爬虫策略,瞬间被打趴下了。不过研究了好几天之后终于是搞定了,求助的一个朋友,最后的原理我可能也不是太清楚,写下来,记录一下,有遇到类似问题的可以参考一下。

这个反爬虫策略,具体是这样的,当我写了一个这样的get请求。

content = requests.get(wanzurl).content

前两百条,都会返回网页源码,然后我能得到我想要的数据,但是每24小时你通过代码访问的超过200条之后,就会返回一个js脚本,神奇的脚本,同一个网址,每次访问返回的脚本都不一样,js脚本是这样的。

function UGy(UGy_) { function gn() { return getName(); }; return gn(); return 'UGy' } function o9P() { 'return o9P'; return '17' } function getName() { var caller = getName.caller; if (caller.name) { return caller.name } var str = caller.toString().replace(/[\s]*/g, ""); var name = str.match(/^function([^\(]+?)\(/); if (name && name[1]) { return name[1]; } else { return ''; } } W2 = 'v'; function do(do_) { function w() { return getName(); }; return w(); return 'do' } E0zT = function() { 'return E0zT'; return 'id='; }; function Vo() { 'Vo'; function _V() { return '=' }; return _V(); } _V4R9e = 'assign'; _x2vzv = 'replace'; _riss5 = location; function CY(CY_) { function f() { return getName(); }; return f(); return 'CY' } gw4G = '&_d'; function oPe(oPe_) { function ad() { return getName(); }; return ad(); return 'oPe' } function M7n5() { 'return M7n5'; return '.ph' } eF9 = function(eF9_) { var _e = function(eF9_) { 'return eF9'; return eF9_; }; return _e(eF9_); }; function oq8() { 'oq8'; function _o() { return 'p?' }; return _o(); } kZsu = function() { 'return kZsu'; return 'f56'; }; xK9 = function(xK9_) { 'return xK9'; return xK9_; }; eC = function() { 'eC'; var _e = function() { return 'o' }; return _e(); }; function CjJ(CjJ_) { function si() { return getName(); }; return si(); return 'CjJ' } function on(on_) { function m() { return getName(); }; return m(); return 'on' } function b2(b2_) { function _b(b2_) { function u() { return getName(); } function b2_() {} return u(); return b2_ }; return _b(b2_); } function KX0(KX0_) { function _K(KX0_) { function th() { return getName(); } function KX0_() {} return th(); return KX0_ }; return _K(KX0_); } Nm = function() { 'return Nm'; return 'o'; }; function VlK() { 'VlK'; function _V() { return 'd=' }; return _V(); } _MBGz6 = 'href'; _MG5Qx = window; gm = '5'; location = (function(g7Z_) { return (function(g7Z_) { return g7Z_; })(g7Z_); })('/f') + eC() + (function() { 'return qy'; return 'r' })() + b2('f2') + (function() { 'return OB'; return (function() { return 'm'; })(); })() + M7n5() + oq8() + on('f6') + Nm() + VlK() + W2 + (function(CJL_) { return (function(CJL_) { return CJL_; })(CJL_); })('ie') + do('ze') + KX0('Klt') + (function(DnX_) { return (function(DnX_) { return DnX_; })(DnX_); })('re') + oPe('nUH') + eF9('&t') + E0zT() + gm + xK9('67') + '57' + (function() { 'return bK'; return '9' })() + gw4G + CjJ('p49') + UGy('bNQ') + Vo() + o9P() + CY('S3') + '55' + kZsu(); _MG5Qx.href = (function(g7Z_) { return (function(g7Z_) { return g7Z_; })(g7Z_); })('/f') + eC() + (function() { 'return qy'; return 'r' })() + b2('f2') + (function() { 'return OB'; return (function() { return 'm'; })(); })() + M7n5() + oq8() + on('f6');

看起来刁刁的,于是我尝试看一波js代码,看了一天之后,搞得我恶心的要死,于是求助我朋友,得到部分解密代码,

var location{ assign : set } var url = ""; function set(s){ url = s; } function get(){ return url; }

一共有四种解密的代码,已经全都写好了。大概讲一下思路,先将返回的js代码格式化,然后

看到location调用了assign函数,然后定义一个结构是location的函数

var location{ assign : set } var url = ""; function set(s){ url = s; } function get(){ return url; }

然后python调用get函数,就能返回这个js脚本里面的参数。将写好的js代码,加到返回的js脚本里。

这个服务器返回的js脚本直接执行的话,会在当前的url后面新增一个参数

解密之后,把解出来的参数加到原来的链接之后再次发起请求,服务器就会返回数据。

 

然后一个通过js动态添加参数的反爬虫策略被完美破解。其中的js代码也是经过混淆,非常的难以看懂,主要就是找到js脚本里面的location,window,和href几个参数,将即将返回的参数,通过添加js代码,直接取出来。

 

整个破解原理大概是:多次请求之后,服务器不再直接返回源码,而是返回一个js文件,这个js文件执行之后,最终会向url栏添加一串参数,我们写一个函数,将它要返回给浏览器url地址栏的参数,返回出来就好了。。。

不用管它加密的逻辑,反正他最终都要返回一个参数到url地址栏,也就是window.location.href的部分,去看这三个单词相关的代码,然后写代码将最后的参数返回到代码里进行拼接。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有